// #include<iostream>
// #include<mysql/mysql.h>
// #include<string>
// #include<cstring>
// using namespace std;

// const string host  = "localhost";
// const string user = "connector";
// const string passwd = "123456";
// const string db = "conn";
// const unsigned int port = 3306;

// int main()
// {
//     // cout << "mysql.client version: " << mysql_get_client_info() << endl;

//     MYSQL* my = mysql_init(nullptr); //MYSQL就是一个结构体
//     if (nullptr == my)
//     {
//         return 1;
//         cerr << "init MYSQL error" << endl;
//     }
//     //

//     if (mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
//     {
//         cerr << "connect MySQL error" << endl;
//         return 2;
//     }
//     else cout << "connect success" << endl;

//     string sql = "select * from user ";
//     int n = mysql_query(my, sql.c_str());
//     if (n == 0) cout << sql << " success" << endl;
//     else 
//     {
//         cout << sql << "error" << endl;
//         return 3;
//     }
//     //分析二维数组， 全部都是和MYSQL_RES有关的。    
//     MYSQL_RES* res = mysql_store_result(my);
//     if (res == nullptr)
//     {
//         cerr << "mysql_store_result error" << endl;
//         return 4;
//     }

//     my_ulonglong rows = mysql_num_rows(res);   //这个返回的结果其实就是我们new或molloc出来的这个二维数组的行数
//     my_ulonglong cols = mysql_num_fields(res);

//     cout << "行: " << rows << endl;
//     cout << "列: " << cols << endl;


//     MYSQL_FIELD* field_array = mysql_fetch_fields(res);
//     for (int i = 0; i < cols; i++)
//     {
//         cout << field_array[i].name << "\t";
//     }
//     cout << endl;
//     for (int i = 0; i < rows; i++)
//     {
//         MYSQL_ROW row = mysql_fetch_row(res);   
//         for (int j = 0; j < cols; j++)
//         {
//             cout << row[j] << "\t";
//         }
//         cout << endl; 
//     }

//     // while (true)
//     // {
//     //     cout << ">>> ";
//     //     if (!getline(cin, sql) || sql == "quit")
//     //     {   
//     //         cout << "bye bye" << endl;
//     //         break;
//     //     }
//     //     //

//     //     int n = mysql_query(my, sql.c_str());
//     //     if (n == 0) cout << sql << "success: " << n << endl;
//     //     else cout << sql << "error" << ":" << strerror(errno) << endl;
//     // }
    

//     mysql_close(my);    
//     return 0;//
// }


#include<iostream>
#include<mysql/mysql.h>  
#include<string>
using namespace std;
const string host = "localhost";
const string user = "mian_yang";    
const string passwd = "MYhylk563_al36huz.6";
const string db = "school_book_manage";
const unsigned int port = 3306; 



int main()
{
    MYSQL* my = mysql_init(nullptr);
    if (nullptr)
    {
        cerr << "init MySQL error" << endl;
        return 1;
    }
    //

    if (mysql_real_connect(my, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
    {
        cerr << "connect error" << endl;
        return 0;
    }
    //
    cout << "connect success" << endl;

    string sql = "select * from user";
    int n = mysql_query(my, sql.c_str());
    if (n == 0) cout << sql << " success" << endl;
    else 
    {
        cerr << sql << " error" << endl;
        return 3;
    }
    //
    MYSQL_RES* res = mysql_store_result(my);
    if (res == nullptr) 
    {
        cerr << "res error" << endl;
        return 4;
    }
    MYSQL_FIELD* fields = mysql_fetch_fields(res);
    my_ulonglong cols = mysql_num_rows(res);
    for (int i = 0; i < cols; i++)
    {
        cout << fields[i].name << "\t";
    }
    cout << endl;   

    my_ulonglong rows = mysql_num_rows(res);
    for (int i = 0; i < rows; i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res);
        for (int j = 0; j < cols; j++)
        {
            cout << row[j] << "\t";
        }
        cout << endl;
    }

    mysql_free_result(res);

    mysql_close(my);
    return 0;
}